#include "Simulacion.h"

/*Constructor*/
Simulacion::Simulacion(bool *cambios,Mutex *m){
	hiloCreado=0;	
	hayCambios=cambios;
	mutex=m;
 }
 /*Destructor*/
 Simulacion::~Simulacion(){
	 if(hiloCreado)
		 			 detener();
	 conexion.desconectar(); 
 }

 int Simulacion::conectar(std::string ip , int puerto){
   		
	if(conexion.conectar(ip,puerto))
			return 1;
	else
    		return 0;
}

void Simulacion::iniciar(){

	 if(hiloCreado==0){  
     	hs = new HiloSimulador(&conexion,&campo,hayCambios,mutex);
		hs->cargarArchivoConfiguracion(); 
	    hiloCreado=1;
		hs->run();
	 }		
}

void Simulacion::reiniciar(){
	
	campo.reiniciar();
	if( hiloCreado ==1) {
		  hs->reiniciar();
		   
	}	
	
	}
void Simulacion::detener(){
  
	if( hiloCreado ==1) {
		hs->stop();	
		hs->join();
		delete hs;
		conexion.desconectar(); 
		hiloCreado=0;
		*hayCambios=false;
	}	
}
void Simulacion::cargarCampo(std::string nombre,int m[20][15]){
		
	campo.cargarCampo(nombre);	
	campo.copiarCampo(m);
}

 void Simulacion:: devolverValoresCrecimiento(int m[ANCHO][LARGO]){
	 
         campo.devolverValoresCrecimiento(m);	 
}

void Simulacion::devolverValoresDegradacion(int d[ANCHO][LARGO]) {
	
		campo.devolverValoresDegradacion(d);	 
} 


 void Simulacion::subirVelocidad(){
		if(hiloCreado==1) hs->subirVelocidad();
}

void Simulacion::bajarVelocidad(){
		if(hiloCreado==1) hs->bajarVelocidad();
}
